package org.rujue.common.web;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

@Data
public class ResponseResult implements Serializable {

    public static final String MESSAGE_SUCCESS = "操作成功";
    public static final String MESSAGE_ERROR = "操作失败";
    public static final String STATUS_SUCCESS = "success";
    public static final String STATUS_ERROR = "error";

    // 创建操作成功的构造函数
    public ResponseResult() {
        this.status = STATUS_SUCCESS;
        this.message = MESSAGE_SUCCESS;
    }

    /**
     * 设置一个状态
     */
    private String status;

    /**
     *  提示信息
     */
    private String message;

    /**
     *  返回给浏览器的信息
     */
    private Map<String, Object> data = new HashMap<>();

    /**
     * 返回成功的一个对象
     * 使用方法：ResponseResult.success()
     * @return 返回成功的一个对象
     */
    public static ResponseResult success(){
        return success(MESSAGE_SUCCESS);
    }

    public static ResponseResult success(String message){
        ResponseResult responseResult = new ResponseResult();
        responseResult.setStatus(STATUS_SUCCESS);
        responseResult.setMessage(message);
        return responseResult;
    }

    public static ResponseResult error(){
        return error(MESSAGE_ERROR);
    }

    public static ResponseResult error(String message){
        ResponseResult responseResult = new ResponseResult();
        responseResult.setStatus(STATUS_ERROR);
        responseResult.setMessage(message);
        return responseResult;
    }


    @Override
    public String toString() {
        return "ResponseResult{" +
                "status='" + status + '\'' +
                ", message='" + message + '\'' +
                ", data=" + data +
                '}';
    }

    /**
     * 链式添加map数据
     * 使用案例：返回成功对象并且添加一个date对象和一个test对象
     * 使用方法：ResponseResult.success().add("date",date).add("test",test);
     * @param key 键值
     * @param object 对象
     * @return 链式添加map数据
     */
    public ResponseResult add(String key, Object object){
        this.getData().put(key, object);
        return this;
    }

}

